package cn.tedu.v1;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务器
 * 编写步骤:
 * 1.定义私有属性: ServerSocket【运行服务器端网络连接类】
 * 2.实现Server构造器---实例化ServerSocket---申请端口号:6666
 * 3.实现start()方法---①等待客户端连接
 *                    ②IO流
 * 4.构建主方法: 创建Server对象，并且启动Start
 */
public class Server {
    //1.定义私有属性: ServerSocket 申请端口号: 6666
    private ServerSocket serverSocket;
    //2.实现Server构造器: 传入一个参数: 申请软件端口号: 6666
    public Server(){
        try {
            serverSocket=new ServerSocket(6666);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //3.实现start()方法:等待客户端链接: accept() 返回一个socket对象
    public void start()  {
        System.out.println("-------等待客户端链接------");
        Socket socket= null; //卡住---等待用户客户端发起连接操作
        try {
            socket = serverSocket.accept();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("一个客户端连接成功了~~~");
        //从客户端连接服务器端---链接成功---获取Socket对象【实现对话】
        InputStream is= null;  //读入
        //套高级流---转换流:  目的: 指定字符集
        InputStreamReader isr= null;
        BufferedReader br=null;


       /* //【拓展1: 从socket获取低级流--写出】
        OutputStream os=null;*/

        try {
            //从客户端连接服务器端---链接成功---获取Socket对象【实现对话】
            is = socket.getInputStream();


            /*//【拓展1:从socket获取低级流--写出 】
            os=socket.getOutputStream();*/


            //套高级流---转换流:  目的: 指定字符集
            isr = new InputStreamReader(is,"UTF8");


            /*//【拓展2: 套高级流---传输字符串---①转换流---目的:指定字符集】
            OutputStreamWriter osw=new OutputStreamWriter(os,"UTF8");*/


            //套高级流---缓冲流:  目的: 加速文字传输
             br=new BufferedReader(isr);


            /*//【拓展3: 套高级流---②缓冲流---目的:加速文字传输】
            BufferedWriter bw=new BufferedWriter(osw);*/


            //客户端--一直写出    服务器--一直读入
            //5.从服务器端一直读入文本
            String str=null;  //5.1 保存每次读入的文本

           /* //【拓展4: 套高级流---③字符输出流---目的:输出一行文本】
            PrintWriter pw=new PrintWriter(bw,true);*/

           /* //【拓展5: 】
            String line=null;
            while (true){
                line= input.nextLine();
                pw.println(line);
                System.out.println();
            }*/

            while (true){
                str= br.readLine();  //每次获取给str覆盖
                System.out.println("客户端说的话: "+str);
            }
        } catch (UnsupportedEncodingException e){
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br!=null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    //4.构建主方法
    public static void main(String[] args) throws IOException {
        //创建Server对象
        Server server=new Server();  //注册软件端口号: 6666
        server.start(); //卡住
    }
}